package com.mindskip.xzs.configuration.config;

import com.mindskip.xzs.domain.TaskExam;
import com.mindskip.xzs.service.TaskServer;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

// 使用 @Configuration 注解将该类标注为 Spring 配置类，作为 Spring 应用上下文的配置类来管理。
@Configuration
// 使用 @EnableScheduling 注解启用 Spring 的定时任务调度功能
@EnableScheduling
public class AppConfig {

    // 使用 @Resource 注解自动注入 TaskServer 类型的 Bean，这个服务类提供了对 TaskExam 对象的操作方法。
    @Resource
    private TaskServer taskServer;

    // 使用 @Scheduled 注解定义一个定时任务，每隔5分钟执行一次
    @Scheduled(cron = "0 0/5 * * * ?")

    //在 checkTaskStatus 方法中，执行以下步骤：
    //调用 taskServer.list() 方法获取所有 TaskExam 对象的列表。
    //获取当前日期和时间。
    //遍历每个 TaskExam 对象，根据当前时间与任务的开始时间和结束时间进行比较，设置任务的状态：
    //如果当前时间在任务的开始时间之前，设置任务状态为 0（未开始）。
    //如果当前时间在任务的结束时间之后，设置任务状态为 -1（已结束）。
    //否则，设置任务状态为 1（进行中）。
    //调用 taskServer.updateBatchById(taskExams) 方法批量更新任务状态。
    public void checkTaskStatus() {
        // 获取所有 TaskExam 列表
        List<TaskExam> taskExams = taskServer.list();
        // 获取当前日期和时间
        Date date = new Date();
        // 遍历所有 TaskExam 对象
        for (TaskExam taskExam : taskExams) {
            // 如果当前时间在任务的开始时间之前，设置任务状态为0（未开始）
            if (date.before(taskExam.getLimitStartTime())) {
                taskExam.setStatus(0);
            }
            // 如果当前时间在任务的结束时间之后，设置任务状态为-1（已结束）
            else if (date.after(taskExam.getLimitEndTime())) {
                taskExam.setStatus(-1);
            }
            // 否则，设置任务状态为1（进行中）
            else {
                taskExam.setStatus(1);
            }
        }
        // 批量更新任务状态
        taskServer.updateBatchById(taskExams);
    }
}
